﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Negocio.Eventos;
using Entidades.Eventos;

public partial class Eventos_frmRegistrarReserva : System.Web.UI.Page
{

  
    protected void Page_Load(object sender, EventArgs e)
    {
        cancelar.ServerClick += new EventHandler(cancelar_ServerClick);
        guardar.ServerClick += new EventHandler(guardar_ServerClick);
        buscarProductos.ServerClick += new EventHandler(buscarProductos_ServerClick);

        var productoList = Session["listaProductos"];

        if (productoList != null)
        {
            fillProductsInformation((List<EveProducto>)productoList);
        }

        if (!Page.IsPostBack)
        {

            List<EveTipoEvento> eveTipoEvento = EveTipoEventoBLL.listar();
            List<ListItem> listListItem = eveTipoEvento.Select(ev => new ListItem { Value = ev.idTipoEvento.ToString(), Text = ev.nombre }).ToList();
            selectTipoEvento.Items.Clear();
            foreach (ListItem listItem in listListItem)
                selectTipoEvento.Items.Add(listItem);


            nombre.Value = Session["nombreEvento"] == null ? "" : Session["nombreEvento"].ToString();
            duracion.Value = Session["duracionEvento"] == null ? "" : Session["duracionEvento"].ToString();
            observacion.Value = Session["observacionEvento"] == null ? "" : Session["observacionEvento"].ToString();
        }
    }

    void buscarProductos_ServerClick(object sender, EventArgs e)
    {
        Session["nombreEvento"] = nombre.Value;
        Session["duracionEvento"] = duracion.Value;
        Session["observacionEvento"] = observacion.Value;
        Response.Redirect("frmListaProductos.aspx");
    }

    void cancelar_ServerClick(object sender, EventArgs e)
    {
        Session["listaProductos"] = null;
        Session.RemoveAll();
        Response.Redirect("frmGestionarEvento.aspx");
    }

    void guardar_ServerClick(object sender, EventArgs e)
    {
        EveEvento eveEvento = new EveEvento();
        //falta agregar catalogo
        eveEvento.nombre = nombre.Value;
        eveEvento.observacion = observacion.Value;
        eveEvento.idTipoEvento = Convert.ToInt32(selectTipoEvento.Value);
        eveEvento.duracion = duracion.Value;
        eveEvento.estado = true;

        List<EveProductoEvento> eveProductoEventoList = new  List<EveProductoEvento>();

        List<EveProducto> eveProductoList = (List<EveProducto>)Session["listaProductos"];

        foreach (EveProducto item in eveProductoList)
        {

            //buscamos las cantidades y los subtotales
            decimal descuento = 0M;
            foreach (TableRow tr in tablaProductos.Controls)
            {
                foreach (TableCell tc in tr.Controls)
                {
                    if (tc.ID=="descuentotc"+item.idProducto)
                    {
                        ControlCollection controles = tc.Controls;
                        if (controles.Count > 0)
                        {
                            if (tc.Controls[0] is TextBox)
                            {
                                TextBox textBox = (TextBox)tc.Controls[0];
                                descuento = Convert.ToDecimal(textBox.Text);
                            }
                        }

                        goto ActualizarProducto;
                    }
                }
            }

        ActualizarProducto:
            EveProductoEvento eveProductoEvento = new EveProductoEvento();
            eveProductoEvento.idProducto = item.idProducto;
            eveProductoEvento.descuento = descuento;
            eveProductoEventoList.Add(eveProductoEvento);
        }

        eveEvento.Eve_Producto_evento = eveProductoEventoList;
        eveEvento.guardar();
        //limpiar Sesion
        Session.RemoveAll();
        Response.Redirect("frmGestionarEvento.aspx");
        
    }

    void fillProductsInformation(List<EveProducto> eveProductoList)
    {
        //fill products table
        foreach (EveProducto eveProducto in eveProductoList)
        {
            TableRow tr1 = new TableRow();

            TableCell tc1 = new TableCell(); //Nombre Producto
            Label lbl1 = new Label();
            lbl1.Text = eveProducto.nombre;
            tc1.Controls.Add(lbl1);

            TableCell tc2 = new TableCell(); //Nombre Producto
            Label lbl2 = new Label();
            lbl2.Text = eveProducto.monto.ToString();
            tc2.Controls.Add(lbl2);

            TableCell tc3 = new TableCell(); //Precio
            tc3.ID = "descuentotc" + eveProducto.idProducto;
            TextBox txtDescuento = new TextBox();
            txtDescuento.Text = "0";
            txtDescuento.TextChanged += new EventHandler(txtDescuento_TextChanged);
            txtDescuento.Attributes.Add("runat", "server");
            txtDescuento.Attributes.Add("onchange", "__doPostBack('txtDescuento_TextChanged','')");
            txtDescuento.ID = "descuento" + eveProducto.idProducto;
            tc3.Controls.Add(txtDescuento);

            TableCell tc4 = new TableCell(); //Precio Final
            tc4.ID = "precioFinal" + eveProducto.idProducto;
            Label lbl4 = new Label();
            lbl4.Text = eveProducto.monto.ToString();
            tc4.Controls.Add(lbl4);
            
            tr1.Cells.Add(tc1);
            tr1.Cells.Add(tc2);
            tr1.Cells.Add(tc3);
            tr1.Cells.Add(tc4);

            tablaProductos.Rows.Add(tr1);
        }
    }

    protected void txtDescuento_TextChanged(object sender, EventArgs e)
    {
        TextBox textBox = (TextBox)sender;
        int idProducto = Convert.ToInt32(textBox.ID.Replace("descuento", ""));

        var productoListTmp = Session["listaProductos"];
        EveProducto eveProducto = null;
        if (productoListTmp != null)
        {
            List<EveProducto> productoList = (List<EveProducto>)productoListTmp;
            eveProducto = productoList.Where(pe => pe.idProducto == idProducto).FirstOrDefault();
        }

        foreach (TableRow tr in tablaProductos.Controls)
        {
            foreach (TableCell tc in tr.Controls)
            {

                if (tc.ID != null && tc.ID.Contains("precioFinal" + idProducto))
                {
                       ControlCollection controles = tc.Controls;
                       if (controles.Count > 0)
                       {
                           if (tc.Controls[0] is Label)
                           {
                               Label label = (Label)tc.Controls[0];
                               label.Text = (eveProducto.monto - Convert.ToInt32(textBox.Text)).ToString();
                           }
                       }
                }
            }               
        }
    }


   
}